home *** CD-ROM | disk | FTP | other *** search
- AddExtender ("WXSock32i.dll")
- IntControl (35, 500, 0, 0, 0)
- bOK = @TRUE
- sDial = "<dialupname>"
- nMaxRedial = <numredials>
- nRedialDelay = 10
- sPgmPath = "<pgmpath>"
- sPgmDir = "<pgmdir>"
- bAllSvcs = <allservices>
- sServices = "<services>"
- sErrDesc = ""
- nWait = 5 ; How many minutes to wait for Exchange to finish its work
- sWinTitle = "~ - Microsoft Exchange"
-
- ;Dial our host (unless user is on a direct connect)...
- hConn = 0
- nNumRedials = 0
- if (sDial <> "")
- :DialIt
- hConn = DUNConnect (sDial)
- nErr = SGetLastErr ()
- if (!hConn)
- switch nErr
- case @SErrNotFound
- sErrDesc = "Couldn't connect to %sDial%: no such dial-up"
- break
- case @SErrBusy
- if (nNumRedials <= nMaxRedial)
- nNumRedials = nNumRedials + 1
- Delay (nRedialDelay)
- goto DialIt
- else
- sErrDesc = "Couldn't connect to %sDial%: Line busy"
- endif
- break
- case @SErrNoAnswer
- if (nNumRedials <= nMaxRedial)
- nNumRedials = nNumRedials + 1
- Delay (nRedialDelay)
- goto DialIt
- else
- sErrDesc = "Couldn't connect to %sDial%: No answer"
- endif
- break
- case @SErrVoice
- sErrDesc = "Couldn't connect to %sDial%: A human answered"
- break
- case nErr ; <--default
- sErrDesc = "Couldn't connect to %sDial% - error %nErr%"
- endswitch
- bOK = @FALSE
- goto LogIt
- else
- if (nErr == @SAlready)
- ; We're already connected. Don't hang up when this event is thru...
- hConn = 0
- endif
- endif
- endif
-
-
- ; Run Exchange & make it do things...
- if (!WinExist(sWinTitle))
- DirChange (sPgmDir)
- Run (sPgmPath, "")
- while (!WinExist(sWinTitle))
- Delay (1)
- endwhile
- Delay (6)
- endif
-
- WinActivate (sWinTitle)
- sWinTitle = WinGetActive () ; Get actual window name
-
- ; Main processing...
- if (bAllSvcs)
- SendKeysTo (sWinTitle, "!td~")
- Delay (10)
- else
- SendkeysTo (sWinTitle, "!td") ; Force 3rd level menu to be created...
- Delay (1)
- SendkeysTo (sWinTitle, "{esc 3}") ; Back out of menu selection
- Delay (1)
-
- for nSvc = 1 to ItemCount(sServices,@TAB)
- sService = ItemExtract (nSvc, sServices, @TAB)
- gosub WinSelectMenuItem
- Delay (10)
-
- ; Wait for nWait minutes, or till user kills off Exchange manually...
- for n=1 to nWait * 6
- if (WinExist (sWinTitle))
- Delay (10)
- if (!WinExist(sWinTitle)) then goto Cancel
- MouseMove (500+n, 500, "", "")
- endif
- next n
- next nSvc
- endif
-
-
- ; If user hit Ctrl+Break, WIL will bring us here...
- :Cancel
-
- ; Hang up...
- :HangUp
- if (hConn)
- nRet = DUNDisconnect (hConn)
- endif
-
-
- ; Log what we did...
- :LogIt
- if bOK == @TRUE
- sLog = "Ran Exchange"
- else
- sLog = strcat ("Error attempting to automate Exchange:", @CRLF, sErrDesc)
- endif
-
- CMLogMessage (sLog)
- Display (8, "ClockMan95", sLog)
- exit
-
-
- ; Select the menu item corresponding to service "sService"...
- :WinSelectMenuItem
- WSMsSysDir = DirWindows (1)
- WSMhUser32 = DllLoad ("%WSMsSysDir%user32.dll")
- ;Debug(@ON)
- WSMhwnd = IntControl(21, sWinTitle, 0, 0, 0)
- WSMhMenu = DllCall(WSMhUser32, long:"GetMenu", long:WSMhwnd)
- WSMhMenu = DllCall(WSMhUser32, long:"GetSubMenu", long:WSMhMenu, long:3)
- WSMhMenu = DllCall(WSMhUser32, long:"GetSubMenu", long:WSMhMenu, long:0)
- if (!WSMhMenu)
- CMLogMessage ("No Services menu found!")
- else
- WSMhItem = BinaryAlloc(80)
- BinaryEODSet(WSMhItem, 80)
- WSMnSvcs = DllCall(WSMhUser32, long:"GetMenuItemCount", long:WSMhMenu)
- for WSMn = 2 to WSMnSvcs-1 ; skipping over "All services" & horiz separator
- DllCall(WSMhUser32, long:"GetMenuStringA", long:WSMhMenu, long:WSMn, lpbinary:WSMhItem, long:80, long:1024)
- WSMsItem = BinaryPeekStr(WSMhItem, 0, 80)
- if strindex (WSMsItem, sService, 0, @FWDSCAN) == 1
- ; We found the menu item we're looking for...
- WSMnItem = WSMn - 1
- SendKeysTo (sWinTitle, "^%WSMnItem%") ; Ctrl+1, etc.
- endif
- next WSMn
- BinaryFree (WSMhItem)
- endif
- DllFree (WSMhUser32)
-
- return
- ~
-